﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DAL
{
    public partial class Partida
    {
        public string getCorrelativo(dbGestionDataContext _db, int idPresupuesto)
        {
            string numDocumento = "";

            var q= from a in _db.Partidas
                   where a.idPresupuesto == idPresupuesto 
                   group a by a.idPresupuesto into g
                   select  new
                   {
                       idObra=g.Key,
                       codigo=g.Max(p=>p.codigo)
                   };


            
            if (q.Count() == 0)
            {
                numDocumento = "0001";
            }
            else
            {
                int numActual = int.Parse(q.First().codigo);
                numActual++;
                if (numActual < 10)
                    numDocumento = "000" + numActual.ToString();
                else if (numActual < 100)
                    numDocumento = "00" + numActual.ToString();
                else if (numActual < 1000)
                    numDocumento = "0" + numActual.ToString();
                else if (numActual < 10000)
                    numDocumento =  numActual.ToString(); 
                else if (numActual > 9999)
                {
                    throw new Exception("Limite  de Correlativo Comparativo");
                }


            }
            return numDocumento;

        }

        public int getidAnterior(dbGestionDataContext _db, int idinternal, int idObra)
        {
            int intAnterior = 0;

            
            var id = from i in _db.Presupuesto
                     where i.idInternal < idinternal && i.idObra== idObra
                     group i by i.idObra into g
                     select new
                     {
                         idAnterior = g.Max(p => p.idInternal)
                     };

            if (id.Count() > 0)
            {
                intAnterior = id.First().idAnterior;

            }
            else
            {
                throw new Exception("No existe Registros");
            }


            return intAnterior;

        }

        public int getidSiguiente(dbGestionDataContext _db, int idinternal, int idObra)
        {
            int intSiguiente = 0;

            //revisar la sentencia generada
            var id = from i in _db.Presupuesto
                     where i.idInternal > idinternal && i.idObra == idObra
                     group i by i.idObra into g
                     select new
                     {
                         idSiguiente = g.Min(p => p.idInternal)
                     };


            if (id.Count() > 0)
            {
                intSiguiente = id.First().idSiguiente;

            }
            else
            {
                throw new Exception("No existe Registros");
            }

            return intSiguiente;
        }

        public int Add(dbGestionDataContext _db,
            string codigo,
            string descripcion,
            int idSubPresupuesto,
            int idPresupuesto)
        {
            this.idSubPresupuesto = idSubPresupuesto;
            this.codigo = codigo;
            this.descripcion = descripcion;
            this.fechaCre = DateTime.Now;
            this.idPresupuesto = idPresupuesto;


            _db.Partidas.InsertOnSubmit(this);
            _db.SubmitChanges();
            return this.idInternal;
            
        
        }
    }
}